package data

import "sync"

// 数据结构

// map的key是ptid  value是队列
// 通过 sync pool 创建对象 结构体指针
// acg_tm  value float

type QueueMapStruct struct {
	mu     sync.Mutex
	queues map[string]*SafeQueue
}

// new queue map 加上可选参数with opts , 可选参数包括了, 数据
func NewQueueMap() *QueueMapStruct {
	_queues := make(map[string]*SafeQueue)

	// 根据参数 补充默认的队列
	return &QueueMapStruct{
		queues: _queues,
	}
}

func (m *QueueMapStruct) AddQueue(ptIds ...string) {
	m.mu.Lock()
	defer m.mu.Unlock()
	//
	for _, ptid := range ptIds {
		//
		if m.queues[ptid] == nil {
			m.queues[ptid] = NewQueue(ptid)
		}
	}
	return
}

func (m *QueueMapStruct) GetQueue(ptid string) *SafeQueue {
	m.mu.Lock()
	defer m.mu.Unlock()

	if m.queues[ptid] == nil {
		// 加上参数
		m.queues[ptid] = NewQueue(ptid)
	}
	return m.queues[ptid]
}

func (m *QueueMapStruct) GetQueues() []*SafeQueue {
	m.mu.Lock()
	defer m.mu.Unlock()

	qs := make([]*SafeQueue, 0)
	for _, q := range m.queues {
		qs = append(qs, q)
	}

	return qs
}
